package com.qf.simple;

import com.rabbitmq.client.Channel;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

/**
 * @author 千锋健哥
 */
@Component
@RabbitListener(queues = "queue1")
public class Listener1 {

    /**
     * 消息消费处理方法
     * @param msg
     */
    @RabbitHandler
    public void messageHandler(String msg, Channel channel, Message message) throws Exception {
        try {
            System.out.println("=====Listener1=====" + msg);

            //模拟异常
            //String test = null;
            //boolean flag = test.equals("xxx");


            /**
             * 第一个参数: 消息唯一标识
             * 第二个参数: 是否开启批量处理, 如果开启批量处理, 那么一个消费方处理失败后另一个消费方继续处理.
             */
            channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
        } catch (Exception e) {
            e.printStackTrace();
            /**
             * 第一个参数: 消息唯一标识
             * 第二参数: 如果为true, 所有消费者都会拒绝这个消息
             * 第三参数: 如果为true, 消息接收失败后, 消息会从新回到队列,
             *          如果为false那么处理失败后不回队列, 丢弃
             */
            channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, true);
        }
    }
}
